From 481c6ad99a1b1c10e3384095bd7756451690a2e1 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 2 Dec 2017 14:28:05 +0100 Subject: [PATCH] dnd: Add gtk_drag_set_icon_texture() --- docs/reference/gtk/gtk4-sections.txt | 1 + gtk/gtkdnd.c | 32 ++++++++++++++++++++++++++++ gtk/gtkdnd.h | 5 +++++ 3 files changed, 38 insertions(+) diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index fb524303f0..00eb3e15f1 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -5317,6 +5317,7 @@ gtk_drag_begin_with_coordinates gtk_drag_cancel gtk_drag_set_icon_widget gtk_drag_set_icon_surface +gtk_drag_set_icon_texture gtk_drag_set_icon_name gtk_drag_set_icon_gicon gtk_drag_set_icon_default diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index c3e65310c6..f0364ca72f 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -1619,6 +1619,38 @@ gtk_drag_set_icon_surface (GdkDragContext *context, gtk_drag_set_icon_widget_internal (context, widget, (int)hot_x, (int)hot_y, TRUE); } +/** + * gtk_drag_set_icon_texture: (method) + * @context: the context for a drag (This must be called + * with a context for the source side of a drag) + * @texture: the #GdkTexture to use as icon + * @hot_x: the X offset of the hotspot within the icon + * @hot_y: the Y offset of the hotspot within the icon + * + * Sets @texture as the icon for a given drag. GTK+ retains + * references for the arguments, and will release them when + * they are no longer needed. + * + * To position the texture relative to the mouse, its top + * left will be positioned @hot_x, @hot_y pixels from the + * mouse cursor. + */ +void +gtk_drag_set_icon_texture (GdkDragContext *context, + GdkTexture *texture, + int hot_x, + int hot_y) +{ + GtkWidget *widget; + + g_return_if_fail (GDK_IS_DRAG_CONTEXT (context)); + g_return_if_fail (GDK_IS_TEXTURE (texture)); + + widget = gtk_image_new_from_texture (texture); + + gtk_drag_set_icon_widget_internal (context, widget, hot_x, hot_y, TRUE); +} + /** * gtk_drag_set_icon_name: (method) * @context: the context for a drag (This must be called diff --git a/gtk/gtkdnd.h b/gtk/gtkdnd.h index 4038ac3ae9..7b75165eea 100644 --- a/gtk/gtkdnd.h +++ b/gtk/gtkdnd.h @@ -80,6 +80,11 @@ void gtk_drag_set_icon_widget (GdkDragContext *context, GDK_AVAILABLE_IN_ALL void gtk_drag_set_icon_surface(GdkDragContext *context, cairo_surface_t *surface); +GDK_AVAILABLE_IN_3_94 +void gtk_drag_set_icon_texture(GdkDragContext *context, + GdkTexture *texture, + int hot_x, + int hot_y); GDK_AVAILABLE_IN_ALL void gtk_drag_set_icon_name (GdkDragContext *context, const gchar *icon_name, -- 2.30.2